package com.mindskip.xzs.configuration.spring.security;
import com.mindskip.xzs.base.SystemCode;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
import org.springframework.stereotype.Component;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//用于处理未认证用户的请求。当用户未通过认证时，Spring Security 会调用这个类来处理认证异常。
//在构造方法中调用父类构造方法并传递默认登录 URL（/api/user/login），当用户未认证时，默认会重定向到这个 URL。
// 使用@Component注解将这个类声明为一个Spring组件
@Component
// 自定义认证入口点类，继承自LoginUrlAuthenticationEntryPoint
public final class LoginAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {

    // 构造方法，调用父类构造方法，设置默认的登录URL
    public LoginAuthenticationEntryPoint() {
        super("/api/user/login");
    }

    // 重写commence方法，处理认证异常
    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response,
                         AuthenticationException authException) throws IOException, ServletException {
        // 使用自定义工具类RestUtil向客户端发送未授权的响应
        RestUtil.response(response, SystemCode.UNAUTHORIZED);
    }
}